当哈希表 u 中的水果种类超过两个时，移动左边界 j：
int y = fruits[j++] 记录并移除窗口左端的水果 y。
如果 u[y] 变为零，则从哈希表中删除这个水果种类。
ans = max(ans, i - j + 1) 更新 ans 为当前窗口的最大长度（i - j + 1）。

class Solution {
public:
    int totalFruit(vector<int>& fruits) {
        unordered_map<int, int> u;
        int ans = 0;
        for (int i = 0, j = 0; i < fruits.size(); ++i) {
            int x = fruits[i];
            u[x]++;
            while (u.size() > 2) {
                int y = fruits[j++];
                if (--u[y] == 0) {
                    u.erase(y);
                }
            }
            ans = max(ans, i - j + 1);
        }
        return ans;
    }
};